package com.ccp.dev.workflow.dao;

import com.ccp.dev.core.basic.base.IBaseMapper;
import com.ccp.dev.core.basic.web.query.QueryFilter;
import com.ccp.dev.workflow.bpminterface.IActDefMapper;
import com.ccp.dev.workflow.model.BpmNodeSet;
import org.apache.ibatis.annotations.Param;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * ClassDescribe:
 * 流程节点设置数据交互层
 * @author :jiayueqiao
 * Date: 2019-06-03
 * Since:1
 */
public interface BpmNodeSetDao extends IBaseMapper<BpmNodeSet,String>, IActDefMapper {
    /**
     * 根据定义id和父流程定义id删除节点
     * @param params 参数
     * @return sql影响条数
     */
    int delByProcDefIdAndParentProcDefId(Map<String, Object> params);

    /**
     * 根据定义id和节点id删除节点
     * @param params 参数
     * @return sql影响条数
     */
    int delByProcDefIdNodeId(Map<String, Object> params);

    /**
     * 根据参数删除数据
     *
     * @param params 参数
     */
    void delByStartGlobalDefId(Map<String, Object> params);

    /**
     * 删除历史版本的设置数据
     * @param procDefId
     */
    void delByDefId(String procDefId);

    /**
     * 通过定义ID及节点Id更新isJumpForDef字段的设置
     * @param params 参数集合
     */
    void updateIsJumpForDef(Map<String, Object> params);

    /**
     * 更新节点的选择器范围
     * @param setId 节点id
     * @param scope 选择器范围
     */
    void updateScopeById(@Param("setId") String setId, @Param("scope") String scope);

    /**
     * 根据act定义id查询所有节点
     * @param procDefId act定义id
     * @return 节点设置列表
     */
    List<BpmNodeSet> queryByProcDefId(String procDefId);

    /**
     * 根据父流程定义查询所有的外部子流程
     * @param parentProcDefId 父流程定义id
     * @return 节点设置列表
     */
    List<BpmNodeSet> queryByParentProcDefId(String parentProcDefId);

    /**
     * 根据子流程节点id和子流程定义id，查找父流程中的节点
     * @param params 参数
     * @return 节点设置列表
     */
    List<BpmNodeSet> queryParentByProcDefIdAndNodeId(Map<String, Object> params);

    /**
     * 根据子流程定义id获取所有的父流程定义id
     * @param procDefId 定义id
     * @return 节点设置列表
     */
    List<BpmNodeSet> queryParentIdByProcDefId(String procDefId);

    /**
     * 根据parentProcDefId和defId获取流程节点数据
     * @param params 参数
     * @return 节点设置列表
     */
    List<BpmNodeSet> queryByProcDefIdAndParentProcDefId(Map<String, Object> params);

    /**
     * 根据表单类型获取起始表单设置信息
     * @param params 参数
     * @return 设置信息
     */
    BpmNodeSet getBySetType(Map<String, Object> params);

    /**
     * 获取流程设置节点实体
     * @param params
     */
    BpmNodeSet getByProcDefIdNodeIdOrParentProcDefId(Map<String, String> params);

    /**
     * 获取全局表单设置节点
     * @param procDefId
     */
    BpmNodeSet getGlobalByProcDefId(String procDefId);

    /**
     * 根据流程定义获取开始和全局表单的配置。
     * @param procDefId
     * @return
     */
    BpmNodeSet getGlobalByParent(@Param("procDefId") String procDefId, @Param("parentProcDefId") String parentProcDefId);

    List<BpmNodeSet> queryByDefIdOpinion(String procDefId);

    List<BpmNodeSet> queryByParentDefIdOpinion(@Param("procDefId")String procDefId,@Param("parentProcDefId")String parentProcDefId);

    /**
     * 获取其他类型的节点设置 setType>=1
     * @param procDefId
     * @return
     */
    List<BpmNodeSet> queryOtherSetByProcDefId(String procDefId);

    /**
     * 根据procDefId 获取在线表单的数据。
     * @param procDefId
     * @return BpmNodeSetList
     */
    List<BpmNodeSet> getOnlineFormByProcDefId(String procDefId);

    /**
     * 根据procDefId 和父流程定义ID获取在线表单的数据
     * @param procDefId 流程定义id
     * @param parentProcDefId 父流程定义id
     * @return
     */
    List<BpmNodeSet> getOnlineFormByProcDefIdAndParentProcDefId(@Param("procDefId") String procDefId, @Param("parentProcDefId") String parentProcDefId);

    /**
     *获取节点设置人员选择器的范围
     * @param params map
     * @return BpmNodeSet
     */
    BpmNodeSet getScopeByNodeIdAndProcDefId(Map<String, Object> params);

    /**
     * 根据procDefId 获取在线表单的FormKey。
     * @param procDefId
     * @return String FormKey
     */
    String getFormKeyByProcDefId(String procDefId);



    /**
     * 分发汇总配置
     * @param procDefId
     * @param joinTaskKey
     * @return
     */
    BpmNodeSet getByProcDefIdJoinTaskKey(@Param("procDefId") String procDefId, @Param("joinTaskKey") String joinTaskKey);

    void updateJoinTask(Map<String, Object> params);

    /**
     * 根据流程设置ID取流程节点设置(所有的)
     *
     * @param procDefId
     * @return
     */
    List<BpmNodeSet> queryAllByProcDefId(String procDefId);

    /**
     * 导入流程时为更新流程节点信息获取数据
     *
     * @param procDefId
     * @param nodeId
     * @return
     */
    BpmNodeSet getByProcDefIdNodeIdForImport(@Param("procDefId") String procDefId, @Param("nodeId") String nodeId);

    /**
     * 根据流程定义ID获取绑定表单的formKey
     * @param procDefId
     * @param parentProcDefId
     * @return
     */
    String getFormKeyByProcDefIdAndParent(@Param("procDefId") String procDefId, @Param("parentProcDefId") String parentProcDefId);
}
